package cbm.admin.controller;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;

import cbm.commons.BaseController;
import cbm.commons.ConstantsWeb;
import cbm.commons.RequestHelper;
import cbm.commons.ResultadoOperacionBean;
import cbm.commons.SessionContainer;
import ejb.cbm.admin.bean.ParametroBean;
import ejb.cbm.admin.bean.TipoParametroBean;
import ejb.cbm.admin.local.ParametroFacadeLocal;
import ejb.cbm.commons.StackTrace2String;
import ejb.cbm.seguridad.bean.PerfilBean;
import ejb.cbm.seguridad.bean.RegistroIngresoBean;
import ejb.cbm.seguridad.bean.UsuarioBean;
import ejb.cbm.seguridad.local.PerfilFacadeLocal;
import ejb.cbm.seguridad.local.UsuarioFacadeLocal;


public class ParametroController  extends BaseController{

	public ParametroFacadeLocal parametroFacadeLocal;
	
	//gclv 16/09/2011
	public ModelAndView open(HttpServletRequest request, HttpServletResponse response){
		String pagSig = resources.getString("parametro_controller");
		return new ModelAndView(pagSig);
	}

	//gclv 16/09/2011
	public ModelAndView buscar(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession(false);
		String paginaSig = "administrativo/ConfigurarParametrosTabla.jsp";
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ConstantsWeb.EXITO,"",ConstantsWeb.MSGEXITO);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		Context context = null;
		ParametroBean filtro = null;
		List<ParametroBean> lista = null;		
		try{
			filtro = getParametroBean(request);
			context = new InitialContext();
			parametroFacadeLocal=(ParametroFacadeLocal)context.lookup("CBM/ParametroFacade/local");
			
			lista = parametroFacadeLocal.buscarXFiltro(filtro);
			if (lista.size() == 0) lista = null;			
		}catch(RuntimeException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al buscar");
			resultado.setMensaje(ConstantsWeb.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
			e.printStackTrace();
		}catch(NamingException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al buscar");
			resultado.setMensaje(ConstantsWeb.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
			e.printStackTrace();
		}		
		sessionContainer.addTemporal(ConstantsWeb.RESULTADO_OPERACION, resultado);
		sessionContainer.addTemporal(ConstantsWeb.GRILLA, lista);
		
		return new ModelAndView(paginaSig,ConstantsWeb.RPTA_AJAX_REQUEXT,resultado.getAsArrayJS());
	}

	//gclv 16/09/2011
	public ParametroBean getParametroBean(HttpServletRequest request) {
		ParametroBean parametroBean = null;
		Double dValorNumerico;
		TipoParametroBean tipoParametroBean = new TipoParametroBean();
		try {
			Long codigoParametro = RequestHelper.getParameterLong(request, "txtCodigoParametro");
			Long codigoTipoParametro = RequestHelper.getParameterLong(request, "selTipoParametro");
			String descripcion = RequestHelper.getParameterString(request, "txtDescripcionParametro");
			Long valorNumerico = RequestHelper.getParameterLong(request, "txtValorNumerico");
			String valorAlfanumerico = RequestHelper.getParameterString(request, "txtValorAlfanumerico");
			Long flagActivo = RequestHelper.getParameterLong(request, "selEstado");
						
			parametroBean = new ParametroBean();
			parametroBean.setCodigoparametro(codigoParametro);
			if(codigoTipoParametro != null){
				tipoParametroBean = parametroFacadeLocal.findByCodigoTipo(codigoTipoParametro); //
				parametroBean.setTipoparametro(tipoParametroBean); //
			}
			parametroBean.setDescripcion(descripcion);
			if(valorNumerico != null){
				dValorNumerico = valorNumerico.doubleValue();
				parametroBean.setValornumerico(dValorNumerico);
			}
			parametroBean.setValoralfanumerico(valorAlfanumerico);
			parametroBean.setFlagactivo(flagActivo);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return parametroBean;
	}

	//gclv 21/09/2011
	public ModelAndView eliminar(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession(false);
		String paginaSig = "administrativo/ConfigurarParametrosTabla.jsp";
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ConstantsWeb.EXITO,"",ConstantsWeb.MSGEXITO);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		UsuarioBean usuarioLogeado = (UsuarioBean)sessionContainer.getSessionElement(ConstantsWeb.USUARIO);
		RegistroIngresoBean registroIngreso = (RegistroIngresoBean)sessionContainer.getSessionElement(ConstantsWeb.REGISTRO_INGRESO);
		Context context = null;
		ParametroBean parametroBean = null;
		List<ParametroBean> lista = null;
		
		try{
			Long codigoParametro = RequestHelper.getParameterLong(request, "hidCodigoParametro");
			parametroBean = new ParametroBean();
			parametroBean.setCodigoparametro(codigoParametro);
			parametroBean.setFechamodificacion(new Date(System.currentTimeMillis()));
			parametroBean.setUsuariomodificacion(registroIngreso.getCodigousuario());
			parametroBean.setFlagactivo(new Long(0));
			
			context = new InitialContext();
			parametroFacadeLocal = (ParametroFacadeLocal)context.lookup("CBM/ParametroFacade/local");
						
			parametroFacadeLocal.save(parametroBean, usuarioLogeado);
			
			parametroBean = getParametroBean(request);
			context = new InitialContext();
			lista = parametroFacadeLocal.buscarXFiltro(parametroBean);
			if (lista.size() == 0) lista=null;			
		}catch(RuntimeException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al eliminar");
			resultado.setMensaje("RuntimeException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al eliminar");
			resultado.setMensaje("NamingException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		sessionContainer.addTemporal(ConstantsWeb.GRILLA, lista);
		return new ModelAndView(paginaSig);
	}
	
	//gclv 21/09/2011
	public ModelAndView openMantenimiento(HttpServletRequest request, HttpServletResponse response){
		String pagSig = "administrativo/ConfigurarParametrosMnt.jsp";
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ConstantsWeb.EXITO,"",ConstantsWeb.MSGEXITO);
		HttpSession session = request.getSession(false);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		Context context = null;
		ParametroBean parametroBean = null;
		String tituloPopUp = "Nuevo Perfil";
		
		//
		List<TipoParametroBean> tipoParametroBean = new ArrayList<TipoParametroBean>();
		//
		try{
			Long codigoParametro = RequestHelper.getParameterLong(request,"codigoParametro");
			parametroBean = new ParametroBean();
			
			context = new InitialContext();
			parametroFacadeLocal = (ParametroFacadeLocal)context.lookup("CBM/ParametroFacade/local");
			if (codigoParametro != null && !codigoParametro.toString().trim().equals("")){
				parametroBean = parametroFacadeLocal.buscar(codigoParametro);
				tituloPopUp = "Modificar Perfil";
			}
			
			//inicio modificacion 22/09/2011
			tipoParametroBean = parametroFacadeLocal.buscarTipos();
			//fin
			
		}catch(RuntimeException e){
			e.printStackTrace();
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al eliminar");
			resultado.setMensaje("RuntimeException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			e.printStackTrace();
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al eliminar");
			resultado.setMensaje("NamingException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(Exception e){
			e.printStackTrace();
		}
		sessionContainer.addTemporal(ConstantsWeb.PARAMETRO, parametroBean);
		sessionContainer.addTemporal(ConstantsWeb.TIPO_PARAMETRO, tipoParametroBean); //
		sessionContainer.addTemporal(ConstantsWeb.TITULOPOPUP, tituloPopUp);
		
		return new ModelAndView(pagSig);
	}

	//gclv 22/09/2011
	public ModelAndView save(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = request.getSession(false);
		String paginaSig = resources.getString("ajaxrequest");
		ResultadoOperacionBean resultado = new ResultadoOperacionBean(ConstantsWeb.EXITO,"",ConstantsWeb.MSGEXITO);
		SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
		Context context = null;
		ParametroBean parametroBean = null;
		UsuarioBean usuarioLogeado = (UsuarioBean)sessionContainer.getSessionElement(ConstantsWeb.USUARIO);
		String tituloPopUp = "";
		try{
			parametroBean = getParametroBean(request);

			context = new InitialContext();
			parametroFacadeLocal=(ParametroFacadeLocal)context.lookup("CBM/ParametroFacade/local");
			parametroFacadeLocal.save(parametroBean,usuarioLogeado); //
			
			//perfilBean = perfilFacadeLocal.buscar(perfilBean.getCodigoperfil());
			//tituloPopUp = "Modificar Perfil";
			
		}catch(RuntimeException e){
			e.printStackTrace();
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al grabar");
			resultado.setMensaje("RuntimeException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}catch(NamingException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo("Error al grabar");
			resultado.setMensaje("NamingException");
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
		}
		
		sessionContainer.addTemporal(ConstantsWeb.RESULTADO_OPERACION, resultado);
		sessionContainer.addTemporal(ConstantsWeb.PERFILES, parametroBean);
		sessionContainer.addTemporal(ConstantsWeb.TITULOPOPUP, tituloPopUp);
		
		return new ModelAndView(paginaSig,"responseText",resultado.getAsArrayJS());
	}


	public ModelAndView update(HttpServletRequest request, HttpServletResponse response){
		return new ModelAndView();
	}
}
